home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / otoko / source.lzh / FuncEnemy / lboss03g.c < prev    next >
C/C++ Source or Header  |  1999-06-14  |  2KB  |  110 lines

  1. /* 3面ボス銀玉 (03g = 03 gin) */
  2. /* 4つ出てくる小さなボスが噴火(?)する破壊可能弾 */
  3. #include <xsp2lib.h>
  4.  
  5. #include "../otoko.h"
  6. #include "../player.h"
  7. #include "../enemy.h"
  8. #include "../eshot.h"
  9. #include "../effect.h"
  10. #include "../priority.h"
  11. #include "../sound.h"
  12.  
  13.  
  14. #define HP_0    1        /* 耐久力 */
  15.  
  16. static short points_disp;    /* 得点を表示するか */
  17. static short rand_work;        /* 乱数の種 */
  18.  
  19. static short EnemyMoveLBoss03G (ENEMY *);
  20. static void EnemyTiniLBoss03G (ENEMY *);
  21.  
  22.  
  23. /* ゲーム開始時に1回だけ呼ばれる */
  24. void EnemyInitStaticLBoss03G (void)
  25. {
  26.     points_disp = 0;
  27.     rand_work = 0;
  28. }
  29.  
  30.  
  31. void EnemyInitLBoss03G (ENEMY * p)
  32. {
  33.     signed int rand_table[8] =
  34.     {4096, -16384, 65536, -32768, 0, -4096, 16384, 0};
  35.  
  36.     p->vx = p->parent->vx + rand_table[rand_work];
  37.     p->vy = (-4 << 16) + p->parent->vy + rand_table[rand_work];
  38.     if (++rand_work > 7)
  39.         rand_work = 0;
  40.  
  41.     p->hit_px = 12;
  42.     p->hit_py = 12;
  43.     p->hit_sx = 12;
  44.     p->hit_sy = 12;
  45.     p->hit_cx = 12;
  46.     p->timer = 0;
  47.     p->damage = 0;
  48.     p->flash = 0;
  49.     p->hp = HP_0;
  50.     if (p->arg == 0)
  51.         p->info = PALET_LBOSS03 | PRIORITY_ZAKO;
  52.     else
  53.         p->info = PALET_LBOSS03_1 | PRIORITY_ZAKO;
  54.     p->pt = sp_lboss03g;
  55.     p->seq = 0;
  56.     p->func_enemy_move = EnemyMoveLBoss03G;
  57.     p->func_enemy_tini = EnemyTiniLBoss03G;
  58. }
  59.  
  60.  
  61.  
  62. static short EnemyMoveLBoss03G (ENEMY * p)
  63. {
  64.     /* 速度を足して上位ワード(固定整数部)だけ取り出す */
  65.     p->x = (p->lx += p->vx) >> 16;
  66.     p->y = (p->ly += p->vy) >> 16;
  67.  
  68.     switch (p->seq) {
  69.     case 0:
  70.         p->vy += 16384;
  71.         if (SHORT_VY > 6)
  72.             p->seq++;
  73.         break;
  74.     case 1:
  75.         /* 画面外に出たら消去 */
  76.         if (SHORT_LY > 256 + 64)
  77.             return (-1);    /* 消去 */
  78.         break;
  79.     }
  80.  
  81.  
  82.     /* 自機ショットに当たった時の処理 */
  83.     if (p->damage) {
  84.         if ((p->hp -= p->damage) <= 0) {
  85.             /* 死んだ */
  86.             EffectInit (EFFECT_EXPLMINI, 0, p->x, p->y);
  87.             SoundSetSE (SE_EXPL);
  88.  
  89.             if (points_disp < 8) {
  90.                 points_disp++;
  91.                 EffectInit (EFFECT_POINTS_RED, POINTS_100, p->x, p->y);
  92.             } else {
  93.                 EffectInit (EFFECT_POINTS, POINTS_100, p->x, p->y);
  94.             }
  95.             return (-1);    /* 消去 */
  96.         }
  97.         p->damage = 0;
  98.     }
  99.     xsp_set_st (p);
  100.  
  101.  
  102.     return (0);
  103. }
  104.  
  105.  
  106.  
  107. static void EnemyTiniLBoss03G (ENEMY * p)
  108. {
  109. }
  110.